//=============================================================================
//
//		Copyright (C) 1995 by Paul S. McCarthy and Eric Sunshine.
//				Written by Paul S. McCarthy and Eric Sunshine.
//							All Rights Reserved.
//
//		This notice may not be removed from this source code.
//
//		This object is included in the MiscKit by permission from the authors
//		and its use is governed by the MiscKit license, found in the file
//		"License.rtf" in the MiscKit distribution.	Please refer to that file
//		for a list of all applicable permissions and restrictions.
//		
//=============================================================================
//-----------------------------------------------------------------------------
// MiscRadioTracker.M
//
//		Radio-mode selection tracking.
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// $Id: MiscRadioTracker.M,v 1.1 95/09/27 12:21:21 zarnuk Exp $
// $Log:		MiscRadioTracker.M,v $
//	Revision 1.1  95/09/27	12:21:21  zarnuk
//	Initial revision
//	
//-----------------------------------------------------------------------------
#import "MiscRadioTracker.h"
#import "MiscSparseSet.h"
#import "MiscTableBorder.h"


@implementation MiscRadioTracker

//-----------------------------------------------------------------------------
// selectPos:
//-----------------------------------------------------------------------------
- (void) selectPos: (MiscCoord_V)pos
	{
	set->empty();
	set->add( pos );
	set->setCursor( pos );
	}


//-----------------------------------------------------------------------------
// mouseDown:atPos:
//-----------------------------------------------------------------------------
- (void) mouseDown: (NXEvent const*) event atPos: (MiscCoord_V) pos
	{
	[self selectPos: pos];
	}


//-----------------------------------------------------------------------------
// mouseDragged:atPos:
//-----------------------------------------------------------------------------
- (void) mouseDragged: (NXEvent const*) event atPos: (MiscCoord_V) pos
	{
	if (!set->isEmpty())
		set->empty();
	if (pos >= 0 && pos < border->count())
		{
		set->add( pos );
		set->setCursor( pos );
		}
	}


//-----------------------------------------------------------------------------
// mouseUp:atPos:
//
//		NOTE: We emulate Matrix behavior here.	In radio mode if the mouse goes
//				up and the shift key is held down then the cell is deselected.
//-----------------------------------------------------------------------------
- (void) mouseUp: (NXEvent const*) event atPos: (MiscCoord_V) pos
	{
	if (event->flags & NX_SHIFTMASK)
		if (pos >= 0 && pos < border->count() && set->contains( pos ))
			set->empty();
	}


//-----------------------------------------------------------------------------
// keyDown:atPos:
//-----------------------------------------------------------------------------
- (void) keyDown: (NXEvent const*) event atPos: (MiscCoord_V) pos
	{
	if (!set->isEmpty() && pos == set->getCursor())
		set->empty();
	else
		[self selectPos: pos];
	}

@end
